package server;

import server.exception.NotInCartException;

/**
 * Die Klasse ShoppingCart beinhaltet sämtliche Produkte, welche der Kunde im Verlaufe
 * seines Einkaufes 'an sich gerissen' hat.
 * ?Irgendwie gleicht diese Klasse der Stock Klasse...!
 * @author reto
 *
 */
public class ShoppingCart extends AbstractStock implements Cloneable{
	
	public ShoppingCart() {
		super();
	}


	@Override
	public void removeAllProducts()
	{
		super.removeAllProducts();
	}
	/**
	 * Akzeptiert nur Produkte, welche auch tatsächlich im Wagen sind. Falls es 'das letzte seiner Art' ist, wird das Produkt aus der Palette entfernt. Ansonsten wird das Gebinde um eines dezimiert. 
	 * @param product Das Produkt, welches entfernt werden soll.
	 * @throws NotInCartException Falls das zu entfernende Produkt nicht in der Produktepalette des Einkaufswagens ist,
	 */
	@Override
	public Product removeProduct(final String productName) throws NotInCartException {
		if (!super.getProductLots().containsKey(productName)) {
			throw new NotInCartException(productName);
		}
		final Product product=super.getProductLots().get(productName).getProduct();
		super.getProductLots().get(productName).remove();		
		if (super.getProductLots().get(productName).getAmount() <= 0) {
			super.getProductLots().remove(productName);
		}
		return product;
	}

	
	
	@Override
	protected Object clone() throws CloneNotSupportedException {
		final ShoppingCart clonedShoppingCart=new ShoppingCart();
		clonedShoppingCart.getProductLots().putAll(this.getProductLots());
		return clonedShoppingCart;
	}
	
}
